package org.dcma.client.estado;

import java.util.List;

import org.dcma.client.resources.Resources;
import org.dcma.model.Estado;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.HTMLTable.Cell;

public class EstadoGui extends Composite{

	private EstadoServiceAsync estadoService=GWT.create(EstadoService.class);
	private Label lblEstado;
	private TextBox txtNombre;
	private TextBox txtSiglas;
	FormPanel fp;
	VerticalPanel vp;
	Grid container;
	List<Estado> estados;
	Estado estadoSelected;
	final Grid gridEstados;
	public EstadoGui() {
		vp=new VerticalPanel();
		/*
		 * Crearemos una grilla con la lista de Estados
		 */
		gridEstados=new Grid(5,4);
		gridEstados.setWidget(0, 0, new Label("N"));
		gridEstados.setWidget(0, 1, new Label("Nombre"));
		gridEstados.setWidget(0, 2, new Label("Siglas"));
		gridEstados.setWidget(0, 3, new Label("Opciones"));
		gridEstados.getRowFormatter().addStyleName(0, "theader");	
		/*
		 * aqui iran los datos
		 * 
		 * */
		estado_listar();
		
		gridEstados.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				Cell cellSelected=gridEstados.getCellForEvent(event);
				int row=cellSelected.getRowIndex();
				int col=cellSelected.getCellIndex();
				estadoSelected=estados.get(row-1);				
				if(col==3) {
					estado_eliminar();
				}
			}
		});
		vp.add(gridEstados);
		/*
		 * Instanciamos los elementos necesarios
		 */
		txtNombre=new TextBox();
		txtSiglas=new TextBox();
		lblEstado=new Label();
		fp=new FormPanel();
		container=new Grid(5,2);
		
		/*
		 * Agregamos los elementos
		 */		
		container.setWidget(0, 0, new Label("Nombre"));
		container.setWidget(0, 1, txtNombre);
		
		container.setWidget(1, 0, new Label("Siglas"));
		container.setWidget(1, 1, txtSiglas);
		
		container.setWidget(2, 0, new Button("Guardar", new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				Estado estado=new Estado();
				estado.setNombre(txtNombre.getValue());
				estado.setSiglas(txtSiglas.getValue());
				estado_save(estado);		
			}
		}));
		container.setWidget(3, 0, lblEstado);
		vp.add(container);
		initWidget(vp);
	}
	
	protected void estado_eliminar() {
		lblEstado.setText("Eliminado..." + Resources.IMAGES.ajaxloader());
		estadoService.deleteEstado(estadoSelected, new AsyncCallback<Void>() {

			@Override
			public void onFailure(Throwable caught) {
				lblEstado.setText(caught.getMessage());				
			}

			@Override
			public void onSuccess(Void result) {
				lblEstado.setText("Eliminado con exito");
				estado_listar();
			}
		});
		
	}

	private void estado_save(Estado estado) {
		estadoService.addEstado(estado, new AsyncCallback<Void>() {
			
			@Override
			public void onSuccess(Void result) {
				lblEstado.setText("Nuevo estado grabado con exito");				
			}
			
			@Override
			public void onFailure(Throwable caught) {
				lblEstado.setText(caught.getMessage());
				estado_listar();
			}
		});
	}
	
	private void estado_listar() {
		estadoService.listEstados(new AsyncCallback<List<Estado>>() {

			@Override
			public void onFailure(Throwable caught) {
				// TODO Auto-generated method stub
				
			}

			public void onSuccess(List<Estado> result) {
				int row=1;
				String rowStyle;
				estados=result;
				for(Estado e:result) {
					if(row%2==0) { rowStyle="odd"; } else { rowStyle="even"; }
					gridEstados.getRowFormatter().addStyleName(row, rowStyle);	
					gridEstados.setWidget(row, 1, new HTML(e.getNombre()));
					gridEstados.setWidget(row, 2, new HTML(e.getSiglas()));
					gridEstados.setWidget(row, 3, new Hyperlink(Resources.ICONS.delete().getHTML(),true, "#"));					
					row++;
				}
				
			}
		});
	}
}
